The personal computer (“PC”) has, during the past decade, evolved into a useful and relatively usable electronic home appliance. The increasing usefulness of PCs in the home has arisen both from the development of powerful application programs like, for example, graphics-oriented word processing applications and Internet browsers, as well as from an increased connectivity to, and compatibility with, other common household electronic appliances, including telephones, answering machines, fax machines, CD players, and televisions. The PC is thus evolving into a central management device for managing operations of many types of consumer electronic devices, as well as providing a powerful computational platform on which sophisticated consumer-oriented application programs can be run. The increasing usability of PCs has arisen from the adoption by both operating systems and application programs that provide user-friendly, graphical user interfaces. Users are now able to launch and control sophisticated programs using mouse and minimal keyboard input to simple and uniformly presented graphical displays comprising graphical pushbuttons, pull-down menus, and other easy to use graphical controls.
Numerous separate application programs that interface to, and control, external peripheral devices have become commonly available. These applications include, for example, application programs that provide a graphical user interface to a telephone answering machine. The CD-ROM drives that are now provided as a standard feature of PC systems can play recorded music CDs through speakers attached to a PC system, and application programs have been developed to facilitate play of recorded music CDs. Television application programs have been developed that allow a user to view live television broadcasts in a multimedia window displayed on the monitor attached to the PC. Telephone monitoring applications have been developed to run on a PC that allow a user to accept and conduct telephone calls through the microphone and speakers that come standard with modern PCs.
Although great strides have been made in increasing the usefulness of home PCs, certain usability problems remain. One significant usability problem is that of coordinating concurrently executing application programs, so that the PC, and the applications executing on the PC, present a seamless, internally-coordinated system that behaves as a user desires and expects an integrated system to behave.
One aspect of this usability problem is that of implementing application programs to control and interface with external devices such that the application programs can intelligently interoperate during concurrent execution. As an example of the need to coordinate concurrently-executing application programs, consider a scenario where a PC user has launched a telephone application that monitors the user's telephone line for incoming calls and is, at the same time, either watching a television program on the PC or listening to a recorded music CD that is being played by the PC. An incoming telephone call may cause the telephone application program to signal the incoming call to the PC user through either a simulated ringing sound, some sort of graphically displayed indication, or both. These audio or visual signals from the telephone application may interrupt or interfere with the user's watching of the television program. For example, the telephone application may bring up an information window that displays options for the user's response to the incoming telephone call, including answering the call directly, ignoring the call, or forwarding the call to the answering machine. If this display window overlaps or conceals the window through which the television program is being broadcast, the user may miss a portion of the broadcast, and may be required to manipulate the mouse or keyboard in order to respond to the telephone application program or in order to bring the television window back to the forefront of the display screen. In similar fashion, any of the many possible concurrently-executing application programs may respond to outside events, or to user or program-generated events, in such a way as to interfere with other concurrently executing applications.
It is theoretically possible to build integrated applications that can detect each others' runtime activities in the PC and attempt to coordinate those activities. Practically, however, constructing such integrated applications is nearly impossible. Applications may be developed by many different entities, such as individuals or companies. These different development entities generally have no way of knowing what kinds of activities to expect from application programs developed by other entities, and the development entities generally have no means for establishing communications between the various application programs at runtime. A need has therefore been recognized for a technology that can be employed to coordinate the activities of concurrently-executing application programs so that they do not interfere with each other during execution and so that the concurrently executing programs cooperate one with another to provide a unified and easily managed system of cooperating application programs to the PC user.